/*
 * Copyright (c) 2021，上海福宇龙汽车科技有限公司
 * All rights reserved.
 * 文件名称: check_current.h
 * 摘要:
 * 当前版本: V1.0.0 周伟
 * Date: 2024-03-21
 * 历史版本: Vx.x.x，编写者/修改者，修改时间，修改内容（重大发布时，总结重点变更内容）
 */
#ifndef _CHECK_CURRENT_H
#define _CHECK_CURRENT_H

#include "rte.h"

#define TRANSIENT_CURRENT_DELMS (5U)/*瞬间脉冲延时*/
#define PE5_DEL50MS (10U)/*PE5延时50ms*/
#define SHORT_CIRCUIT_PROTECTION_1s (100U)/*1000ms延时*/
#define SHORT_CIRCUIT_PROTECTION (10000U)/*10s延时*/

#define SELF_TEST_DEL (1000U)/*1s延时*/

#define HIGH_VOL (14)
#define LOW_VOL (12)

typedef enum
{
    NOT_SHORT_CIRCUITED,/*未发生短路情况*/
    POSSIBLE_SHORT_CIRCUIT,/*疑似短路*/
    OK_SHORT_CIRCUITED/*本次确实发生短路*/
}Suspected_short_circuit;

typedef struct
{
    Rt_result Instantaneous_pulse;/*瞬间脉冲是否结束*/
    Suspected_short_circuit S_short_circuit;/*疑似短路标志*/
    bool PE5_STATE ;    /*PE5引脚是否拉高，50ms需要拉低回来*/
    bool Startup_Record ;    /*开机瞬间情况下记录一次时间标志*/
    uint8_t Number_short_circuits;/*短路次数计数*/
    uint32_t Record_send_time_5ms;/*记录_开机瞬间_时间*/
    uint32_t Record_send_time_50ms; /*记录_PE5拉高时间_时间*/
    uint32_t Record_send_time_1s; /*记录_疑似短路_时间*/
    uint32_t Record_send_time_10s; /*记录_整个短路保护_时间*/
}check_curr;

/*
 * 函数介绍: 工装自检
 * 参数:
 * 返回值: {*}
 * 备注:
 * 检测系统工作电压是否正常
 * 合格自检灯亮绿灯
 * 不合格亮红灯，并且蜂鸣3声
 */
void frock_self_checking(void);

/*
 * 函数介绍: 产品过流保护
 * 参数:
 * 返回值: {*}
 * 备注:开机瞬间会有大于5A的瞬间脉冲持续1ms，需保持5脚先处于解锁状态，瞬间脉冲过后，可使5脚处于闭锁状态
 * 如果产品上电10S内出现短路，
 * PE4引脚为高电平，一秒后检测PE4还为高，记发生一次短路；
 * 将PE5引脚设为高电平50ms可拉低PE4，再去检测1S PE4如果还为高电平则记短路两次；
 * 在拉高PE550ms可将PE4拉低，在检测1S PE4如果还为高，则三次短路，报短路故障。
 */
Rt_result Overcurrent_protection(void);


/*
 * 函数介绍: 产品过流保护初始化
 * 参数:
 * 返回值: {*}
 * 备注:
 */
void Overcurrent_protection_init(void);
#endif
